package com.whmskj.xjlhsc.mobie.Scheduling.Service;

import com.whmskj.xjlhbc.dto.JcQueryDto;
import com.whmskj.xjlhsc.mobie.Scheduling.Dto.RecordsOfEmployeeAwardsAndSancti;

import java.util.List;
import java.util.Map;

/**
 * @Author: Sakura
 * @Date: 2025/8/30 11:41
 * @Version: v1.0.0
 * @Description: TODO
 **/
public interface RecordsOfEmployeeAwardsAndSanctiService {

    /**
     * 根据查询条件获取奖惩记录列表
     * @param param 查询参数
     * @return 奖惩记录列表
     */
    List<RecordsOfEmployeeAwardsAndSancti> queryList(JcQueryDto param);

    /**
     * 添加新的奖惩记录
     * @param body 奖惩记录信息
     * @return 是否添加成功
     */
    boolean add(RecordsOfEmployeeAwardsAndSancti body);

    /**
     * 审核奖惩记录
     * @param ids 需要审核的奖惩记录ID列表
     * @return 是否审核成功
     */
    boolean approve(List<String> ids);

    /**
     * 作废奖惩记录
     * @param ids 需要作废的奖惩记录ID列表
     * @return 是否作废成功
     */
    boolean invalidate(List<String> ids);

    /**
     * 获取当前登录用户的奖惩记录统计信息
     * @return 包含统计信息的Map
     */
    Map<String, Object> getCurrentUserStatistics();

    /**
     * 获取奖惩记录总体统计信息
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 包含统计信息的Map
     */
    Map<String, Object> getStatisticsOverview(String startDate, String endDate);

    /**
     * 按车间统计奖惩记录
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 按车间统计的结果列表
     */
    List<Map<String, Object>> getWorkshopStatistics(String startDate, String endDate);

    /**
     * 按班组统计奖惩记录
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 按班组统计的结果列表
     */
    List<Map<String, Object>> getTeamStatistics(String startDate, String endDate);

    /**
     * 按员工统计奖惩记录
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 按员工统计的结果列表
     */
    List<Map<String, Object>> getEmployeeStatistics(String startDate, String endDate);

    /**
     * 根据ID获取奖惩记录信息，并添加用户信息
     * @param id 奖惩记录ID
     * @return 奖惩记录信息
     */
    RecordsOfEmployeeAwardsAndSancti getByIdWithUserInfo(String id);

    /**
     * 更新奖惩记录信息
     * @param body 奖惩记录信息
     * @return 是否更新成功
     */
    boolean updateRecord(RecordsOfEmployeeAwardsAndSancti body);

    /**
     * 获取奖惩记录的所有历史版本
     * @return 历史版本列表
     */
    RecordsOfEmployeeAwardsAndSancti getHistoryVersions(String id);

    /**
     * 删除奖惩记录
     * @param id 奖惩记录ID
     * @return 是否删除成功
     */
    boolean removeRecord(String id);
}
